// app.js
const auth = require('./utils/auth');
const util = require('./utils/util');

App({
  globalData: {
    isLoggedIn: false,
    userInfo: null,
    appVersion: '1.0.0',
    lastLoginTime: null
  },

  /**
   * 小程序启动时触发
   */
  onLaunch(options) {
    console.log('小程序启动，参数:', options);
    this.initializeApp();
  },

  /**
   * 小程序显示时触发
   */
  onShow(options) {
    console.log('小程序显示，参数:', options);
    // 每次显示时检查登录状态
    this.checkLoginStatus();
  },

  /**
   * 初始化应用
   */
  initializeApp() {
    try {
      // 检查登录状态
      this.checkLoginStatus();
      
      // 检查更新
      this.checkForUpdates();
      
      console.log('应用初始化完成');
    } catch (error) {
      console.error('应用初始化失败:', error);
    }
  },

  /**
   * 检查登录状态
   */
  checkLoginStatus() {
    try {
      const isLoggedIn = auth.checkLoginStatus();
      const userInfo = auth.getUserInfo();
      
      // 更新全局状态
      this.updateGlobalData({
        isLoggedIn,
        userInfo,
        lastLoginTime: isLoggedIn ? (userInfo?.lastLoginTime || Date.now()) : null
      });
      
      const statusText = isLoggedIn ? '已登录' : '未登录';
      console.log(`用户状态: ${statusText}`, userInfo);
      
      if (!isLoggedIn) {
        console.log('用户未登录，可以使用免费版本');
      }
    } catch (error) {
      console.error('检查登录状态失败:', error);
    }
  },

  /**
   * 更新全局数据
   * @param {Object} data - 需要更新的数据
   */
  updateGlobalData(data) {
    Object.assign(this.globalData, data);
  },

  /**
   * 获取全局数据
   * @param {string} key - 数据键名，不传则返回所有数据
   * @returns {any} 全局数据
   */
  getGlobalData(key) {
    return key ? this.globalData[key] : this.globalData;
  },

  /**
   * 执行登录
   * @param {string} type - 登录类型，'wechat' 或 'account'
   * @param {Object} credentials - 登录凭证（账号登录时传入）
   * @returns {Promise<Object>} 登录结果
   */
  async doLogin(type = 'wechat', credentials = {}) {
    try {
      let result;
      
      if (type === 'wechat') {
        result = await auth.wxLogin();
      } else if (type === 'account') {
        const { username, password } = credentials;
        if (!username || !password) {
          throw new Error('用户名和密码不能为空');
        }
        result = await auth.accountLogin(username, password);
      } else {
        throw new Error('不支持的登录类型');
      }
      
      // 更新全局状态
      this.updateGlobalData({
        isLoggedIn: true,
        userInfo: result.userInfo,
        lastLoginTime: Date.now()
      });
      
      console.log('登录成功:', result);
      return result;
    } catch (error) {
      console.error('登录失败:', error);
      throw error;
    }
  },

  /**
   * 退出登录
   */
  logout() {
    try {
      auth.logout();
      
      // 清空全局状态
      this.updateGlobalData({
        isLoggedIn: false,
        userInfo: null,
        lastLoginTime: null
      });
      
      console.log('退出登录成功');
    } catch (error) {
      console.error('退出登录失败:', error);
    }
  },

  /**
   * 检查小程序更新
   */
  checkForUpdates() {
    if (wx.canIUse('getUpdateManager')) {
      const updateManager = wx.getUpdateManager();
      
      updateManager.onCheckForUpdate((res) => {
        if (res.hasUpdate) {
          console.log('发现新版本，即将下载');
        }
      });
      
      updateManager.onUpdateReady(() => {
        wx.showModal({
          title: '更新提示',
          content: '新版本已经准备好，是否重启应用？',
          success: (res) => {
            if (res.confirm) {
              updateManager.applyUpdate();
            }
          }
        });
      });
      
      updateManager.onUpdateFailed(() => {
        console.error('新版本下载失败');
      });
    }
  },

  /**
   * 获取用户信息
   * @returns {Object|null} 用户信息
   */
  getUserInfo() {
    return this.globalData.userInfo;
  },

  /**
   * 获取登录状态
   * @returns {boolean} 是否已登录
   */
  isLoggedIn() {
    return this.globalData.isLoggedIn;
  }
});